package com.campusbackend.service;

import com.campusbackend.entity.Teams;
import com.campusbackend.entity.vo.TeamDetailVO;
import com.campusbackend.entity.vo.TeamUpdateVO;
import com.campusbackend.entity.vo.TeamListVO;
import com.campusbackend.entity.vo.TeacherTeamsVO;
import com.campusbackend.entity.vo.TeamEditVO;
import com.campusbackend.entity.vo.TeamMembersUpdateVO;
import com.campusbackend.entity.vo.StudentTeamVO;
import com.campusbackend.entity.vo.AdminTeamListVO;
import com.campusbackend.entity.vo.AdminTeamDetailVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 队伍表 服务类
 * </p>
 *
 * @author yezi
 * @since 2025-07-26
 */
public interface TeamsService extends IService<Teams> {

    /**
     * 获取队伍详细信息
     * @param teamId 队伍ID
     * @return 队伍详情
     */
    TeamDetailVO getTeamDetail(Long teamId);

    /**
     * 更新队伍信息
     * @param teamUpdateVO 队伍更新信息
     * @return 是否更新成功
     */
    boolean updateTeamInfo(TeamUpdateVO teamUpdateVO);

    /**
     * 获取教师的队伍信息（组建的队伍 + 入驻的队伍）
     * @param teacherId 教师ID
     * @return 教师队伍信息
     */
    TeacherTeamsVO getTeacherTeams(Long teacherId);

    /**
     * 获取所有队伍列表（根据当前教师ID判断角色关系）
     * @param currentTeacherId 当前登录教师ID
     * @return 所有队伍列表
     */
    List<TeamListVO> getAllTeams(Long currentTeacherId);

    /**
     * 获取队伍编辑信息
     * @param teamId 队伍ID
     * @return 队伍编辑信息
     */
    TeamEditVO getTeamEditInfo(Long teamId);

    /**
     * 更新队伍成员
     * @param teamId 队伍ID
     * @param updateVO 更新信息
     * @return 是否更新成功
     */
    boolean updateTeamMembers(Long teamId, TeamMembersUpdateVO updateVO);

    /**
     * 搜索队伍
     * @param keyword 搜索关键词（队伍编号或名称）
     * @param currentTeacherId 当前教师ID
     * @return 匹配的队伍列表
     */
    List<TeamListVO> searchTeams(String keyword, Long currentTeacherId);

    /**
     * 获取学生所属的队伍信息
     * @param studentId 学生ID
     * @return 学生队伍信息
     */
    StudentTeamVO getStudentTeamInfo(Long studentId);

    /* ========== 管理端方法 ========== */

    /**
     * 管理端 - 获取所有队伍列表
     * @return 所有队伍列表
     */
    List<AdminTeamListVO> getAdminTeamList();

    /**
     * 管理端 - 获取队伍详细信息
     * @param teamId 队伍ID
     * @return 队伍详细信息
     */
    AdminTeamDetailVO getAdminTeamDetail(Long teamId);

    /**
     * 管理端 - 搜索队伍
     * @param keyword 搜索关键词（队伍名称或编号）
     * @return 匹配的队伍列表
     */
    List<AdminTeamListVO> adminSearchTeams(String keyword);
}
